﻿namespace CsharpPro._1023;

public class Sort1
{
    public void BubbleSort(int[] arr)
    {
        int n = arr.Length;
        bool swapped; // 优化标志：判断本轮是否发生交换
        
        // 外层循环：控制需要排序的轮次（最多n-1轮）
        for (int i = 0; i < n - 1; i++)
        {
            swapped = false;
            // 内层循环：每轮比较相邻元素，已经排好的元素无需再比较
            // 每轮结束后，最大的元素已到位，下一轮可减少一次比较
            for (int j = 0; j < n - i - 1; j++)
            {
                // 如果当前元素大于下一个元素，则交换它们
                if (arr[j] > arr[j + 1])
                {
                    // 交换操作
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                    swapped = true; // 标记本轮发生了交换
                }
            }
            // 优化：如果本轮没有发生交换，说明数组已完全有序，可提前退出
            if (!swapped)
                break;
        }
    }
    public void PrintArray(int[] arr)
    {
        foreach (int num in arr)
        {
            Console.Write(num + " ");
        }
        Console.WriteLine();
    }
}
